package com.jiyinit.web.core.business.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import com.jiyinit.web.core.business.dao.TabCoreTaskDao;
import com.jiyinit.web.core.business.dto.DailyLogRequest;
import com.jiyinit.web.core.business.entity.TabSendMessageEntity;
import com.jiyinit.web.core.business.enums.CommonEnum;
import org.springframework.stereotype.Service;

import com.jiyinit.core.framework.base.paging.PagingResult;
import com.jiyinit.web.core.business.dao.TabCoreUserTaskDao;
import com.jiyinit.web.core.business.dto.TaskRequest;
import com.jiyinit.web.core.business.dto.UserTaskRequest;
import com.jiyinit.web.core.business.entity.TabCoreTask;
import com.jiyinit.web.core.business.entity.TabCoreUserTask;
import com.jiyinit.web.core.business.vo.UserTaskVo;

/**
 * <p></p>
 * <p>
 * <PRE>
 * <BR>	修改记录
 * <BR>-----------------------------------------------
 * <BR>	修改日期			修改人			修改内容
 * </PRE>
 *
 * @author wuyuefeng
 * @version 1.0
 * @date 2017/4/11 17:59
 * @since 1.0
 */
@Service("core.userTaskServiceImpl")
public class UserTaskServiceImpl {
	
	@Resource(name = "core.tabCoreUserTaskDao")
    private TabCoreUserTaskDao tabCoreUserTaskDao;

    @Resource(name="core.tabCoreTaskDao")
    private TabCoreTaskDao tabCoreTaskDao;

    public List<UserTaskVo> findUsers(Integer userId){
        return tabCoreUserTaskDao.findUsers(userId);
    }

    public int pushSwitch(DailyLogRequest request){

         return tabCoreUserTaskDao.pushSwitch(request);

    }

    public void addUsers(Integer userId,Integer[] alloterIds,Integer id){
        List<TabCoreUserTask> mesList = new ArrayList();
        for( Integer uid: alloterIds){
            TabCoreUserTask ut = new TabCoreUserTask();
            ut.setUserId(userId);
            ut.setTaskId(id);
            ut.setCreateTime(new Date());
            ut.setAlloterId(uid);
            ut.setIsDel(CommonEnum.IsDelete.COMMON.getCode());
            ut.setIsPush(CommonEnum.IsPush.PUSH.getCode());
            mesList.add(ut);
        }
        if(mesList != null && mesList.size() >=0) tabCoreUserTaskDao.batchInsert(mesList);
    }
	
	 /**
     * 分页查询用户信息
     * @author wuyuefeng
     * @create 2017/4/13 9:00
     * @param
     * @return
     */
    public PagingResult<UserTaskVo> findUserTasksByTaskId(UserTaskRequest userTaskRequest){
        return tabCoreUserTaskDao.findUserTasksByTaskId(userTaskRequest);
    }
    
    /**
     * 
         * 说明
         * @author wuyuefeng
         * @create 2017年4月25日 下午5:53:51
         * @param 
         * @return Integer
     */
    public int addUserTask(TabCoreUserTask TabCoreUserTask) {
        int num = tabCoreUserTaskDao.addUserTask(TabCoreUserTask);
        return num;
    }
    
    /**
     * 
         * 说明
         * @author wuyuefeng
         * @create 2017年5月3日 下午6:06:43
         * @param 
         * @return
     */
    public int updateUserTask(TabCoreUserTask TabCoreUserTask) {
        int num = tabCoreUserTaskDao.updateUserTask(TabCoreUserTask);
        return num;
    }
    
    
    
    /**
     * 
         * 说明
         * @author wuyuefeng
         * @create 2017年4月25日 下午5:54:00
         * @param 
         * @return TabCoreTask
     */
    public UserTaskVo findUserTaskById(Integer userTaskId) {
    	UserTaskVo userTaskVo = null;
    	userTaskVo = tabCoreUserTaskDao.findUserTaskById(userTaskId);		
        return userTaskVo;
    }

	/**
	     * 说明
	     * @author wuyuefeng
	     * @create 2017年5月11日 上午9:51:01
	     * @param 
	     * @return
	     */
	public List<UserTaskVo> finAll(UserTaskRequest userTaskRequest) {
		List<UserTaskVo> userTaskVos = new ArrayList<UserTaskVo>();
		userTaskVos = tabCoreUserTaskDao.findAllByTaskId(userTaskRequest);
		return userTaskVos;
	}
    
	/**
	 * 
	     * 说明-缴费名册
	     * @author wuyuefeng
	     * @create 2017年5月22日 上午10:16:43
	     * @param 
	     * @return
	 */
	public List<UserTaskVo> findUserRolls(Integer userId) {
		List<UserTaskVo> userTaskVos = new ArrayList<UserTaskVo>();
		userTaskVos = tabCoreUserTaskDao.findUserRolls(userId);
		return userTaskVos;
	}
	
	
	/**
     * 说明
     * @author wuyuefeng
     * @create 2017年5月10日 上午11:38:09
     * @param 
     * @return
     */
	public int addTaskAndUser(Integer[] userIds,int taskId) {
		int num = 0;
		if(taskId != 0){
			for(int i=0;i<userIds.length;i++){
				TabCoreUserTask tabCoreUserTask = new TabCoreUserTask();
	            tabCoreUserTask.setAlloterId(userIds[i]);
	            tabCoreUserTask.setCreateTime(new Date());
	            tabCoreUserTask.setTaskId(taskId);
				num = tabCoreUserTaskDao.addUserTask(tabCoreUserTask);
			}
		}
	    return num;
	}
	

	/**
     * 说明
     * @author wuyuefeng
     * @create 2017年5月10日 上午11:38:09
     * @param 
     * @return
     */
	public int addTaskAndUsers(Integer[] userIds,int taskId,int creatUid,TabCoreTask task) {
        //更新task的修改时间
        tabCoreTaskDao.update(task);
		int num = 0;
		if(taskId != 0){
			for(int i=0;i<userIds.length;i++){
				TabCoreUserTask tabCoreUserTask = new TabCoreUserTask();
	            tabCoreUserTask.setAlloterId(userIds[i]);
	            tabCoreUserTask.setCreateTime(new Date());
	            tabCoreUserTask.setUserId(creatUid);
	            tabCoreUserTask.setTaskId(taskId);
				num = tabCoreUserTaskDao.addUserTask(tabCoreUserTask);
			}
		}
	    return num;
	}
	
    public List<TabCoreUserTask> getUserByTaskId(Integer taskId){
        return tabCoreUserTaskDao.getUserByTaskId(taskId);
    }

    public int updateDailyLogAlloters(DailyLogRequest request){
        //根据id，查询现在的users
        List<TabCoreUserTask> users = tabCoreUserTaskDao.getUserByTaskId(request.getId());
        //判断增加的人员
        List<TabCoreUserTask> addUsers = new ArrayList<>();
        for(int  i= 0;i<request.getAlloterIds().length;i++){
            boolean flag = false;
            for(TabCoreUserTask user:users){
                if(user.getAlloterId().intValue() == request.getAlloterIds()[i].intValue()) {
                    flag = true;
                    break;
                }
            }
            if(!flag){
                TabCoreUserTask ut = new TabCoreUserTask();
                ut.setUserId(request.getUserId());
                ut.setTaskId(request.getId());
                ut.setCreateTime(new Date());
                ut.setAlloterId(request.getAlloterIds()[i]);
                ut.setIsDel(CommonEnum.IsDelete.COMMON.getCode());
                ut.setIsPush(CommonEnum.IsPush.PUSH.getCode());
                addUsers.add(ut);
            }

        }
        //判断删除的人员
        List<TabCoreUserTask> deleteUsers = new ArrayList<>();
         for(TabCoreUserTask user:users){
            boolean flag = false;
             for(int  i= 0;i<request.getAlloterIds().length;i++){
                if(user.getAlloterId().intValue() == request.getAlloterIds()[i].intValue()) {
                    flag = true;
                    break;
                }
            }
            if(!flag){
                deleteUsers.add(user);
            }

        }
        int num1 = tabCoreUserTaskDao.batchInsert(addUsers);
        int num2 = tabCoreUserTaskDao.batchDelete(deleteUsers);

        return num1+num2;
    }

    /**
     * 更新用户参与任务的是否阅读过任务的标识为1--is_read_task
     * @author liuzongguang
     * @create 2018/7/27 15:54
     * @param
     * @return
     */
    public int updateIsReadTaskStatus(UserTaskRequest request){
        return tabCoreUserTaskDao.updateIsReadTaskStatus(request);
    }
}
